package persistencia;

import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import modelo.datos.Empresa;
import modelo.datos.Factura;
import modelo.datos.utils.ListaEntradas;
import es.uji.www.GeneradorDatosINE;

public class BaseDatosImpl implements BaseDatos {
	private static final int NUMERO_ENTRADAS = 3;
	private List<Empresa> empresas;
	private final static GeneradorDatosINE generador = new GeneradorDatosINE();
	public final static Empresa ENTRADA_NULL = new Empresa();
	
	public BaseDatosImpl() {
		super();
		iniciaBaseDatos();
	}
	
	private void iniciaBaseDatos() {
		empresas = new ArrayList<Empresa>();
		String nombre;
		String nif;
		String direccion;
		Empresa empresa=new Empresa("Oscar", "123X","Castellon-Morella");
		Factura factura = new Factura("1000","25","T10","23/09/2012","2T");
		empresa.nuevaFactura(factura);
		nuevaEntrada(empresa);
		
		for(int i = 0; i < NUMERO_ENTRADAS; i++) {
			nombre = generador.getNombre();
			nif = generador.getNIF();
			direccion=generador.getProvincia()+"-"+generador.getPoblacion(generador.getProvincia());
			nuevaEntrada(new Empresa(nombre, nif,direccion));
			
		}
		
	}
	
	public ListaEntradas getEntradas() {
		return new ListaEntradas(empresas);
	}
	
	public Empresa buscaEntradaPorNIF(String nif) {
		for(Empresa empresa: empresas)
			if(empresa.getNif().equals(nif))
				return empresa;
		return ENTRADA_NULL;
	}

	public void nuevaEntrada(Empresa empresa) {
		empresas.add(empresa);
	}

	public boolean actualizaEntrada(Empresa empresa) {
		Empresa enLista = buscaEntradaPorNIF(empresa.getNif());
		if(enLista != null) {
			enLista.actualiza(empresa);
			return true;
		}
		return false;
	}

	public boolean borraEntrada(String nif) {
		Empresa empresa = buscaEntradaPorNIF(nif);
		if(empresa == ENTRADA_NULL) return false;
		else empresas.remove(empresa);
		return true;
	}

	@Override
	public int hashCode() {
	    final int prime = 31;
	    int result = 1;
	    result = prime * result
		    + ((empresas == null) ? 0 : empresas.hashCode());
	    return result;
	}

	@Override
	public boolean equals(Object obj) {
	    if (this == obj)
		return true;
	    if (obj == null)
		return false;
	    if (getClass() != obj.getClass())
		return false;
	    BaseDatosImpl other = (BaseDatosImpl) obj;
	    if (empresas == null) {
		if (other.empresas != null)
		    return false;
	    } else if (!empresas.equals(other.empresas))
		return false;
	    return true;
	}
}
